#pragma once

#include<iostream>
#include<string>
#include<fstream>
//工具类


class Util
{
public:
    static bool ReadFileContent(const std::string& filename, std::string*out)//打开的文件名，对应的输出指针
    {

        //这里读取方式默认是以文本方式读取文件的，图片是二进制的，
        // std::ifstream in(filename);//打开文件
        // if(!in.is_open())//打开失败了
        // {
        //     return false;
        // }
        // //到这里就是打开成功了
        // std::string line;
        // while(std::getline(in,line))//读取文件
        // {
        //     *out+=line;//将读取到的内容添加到输出指针
        // }
        // in.close();

        //以二进制方式进行读取操作
        int filesize=FileSize(filename);//先获取文件的大小
        if(filesize>0)//获取成功了
        {
            std::ifstream in(filename);//打开文件
            if(!in.is_open())//打开失败了
            {
                return false;
            }
            //打开成功了
            out->resize(filesize);//分配内存,将我们的文件大小作为内存的大小，将Out设置为文件大小
            in.read((char*)out->c_str(),filesize);//将in中的内容读取到out中去
            in.close();//关闭文件
        }
        else
        {
            return false;
        }
        return true;
    }   

    //从一个大字符串提取一行字符串的能力
    static bool ReadOneLine( std::string& bigstr, std::string*out,const std::string&sep)//genstr，分隔符，对应的输出指针
    {
        //就是进行子串分割操作
        auto pos=bigstr.find(sep);//先查找指定对应的分隔符
        if(pos==std::string::npos)//没找到
        {
            return false;
        }
        //走到这里起码有一行
        *out=bigstr.substr(0,pos);//提取一行,从开头处提取pos个位置的长度
        //那么到这里我们就提取到了第一行的内容了，但是我们需要接着处理第二行内容

        bigstr.erase(0,pos+sep.size());//将第一行的内容拿走,剩下的字符串就是第二行了
        return true; 
    }
    static int FileSize(const std::string& filename)//获取指定文件的大小
    {
        std::ifstream in(filename, std::ios::binary);//以二进制流的方式打开文件
        if(!in.is_open())//打开失败了
        {
            return -1;
        }
        in.seekg(0, std::ios::end);//将当前的pos移动到文件末尾
        int filesize=in.tellg();//获取当前的pos位置，就是文件的大小
        in.seekg(0,in.beg);//我们再将pos位置移动到开头
        in.close();//关闭文件
        return filesize;//将大小进行返回
    }
}; 